/**
 * 
 */
package at.ac.univie.bi.transformation.controller;

import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jxl.Cell;
import jxl.DateCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import at.ac.univie.bi.transformation.model.input.Leistung;
import at.ac.univie.bi.transformation.model.input.Medication;
import at.ac.univie.bi.transformation.model.input.Patient;

/**
 * @author fr
 *
 */
public class ExcelController {

	private String inputFile = "resources/DermatologischePatientendaten.xls";
	
	private ArrayList<Patient> patientList;
	private ArrayList<Leistung> leistungList;
	private ArrayList<Medication> medikationList;
	
	private File inputWorkbook;
	private Workbook w;
	private Sheet sheet;
	
	public ExcelController(){
		
		patientList = new ArrayList<Patient>();
		leistungList = new ArrayList<Leistung>();
		medikationList = new ArrayList<Medication>();
		
		inputWorkbook = new File(inputFile);
		
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			sheet = w.getSheet(0);
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//###############################################################################################
	
	@SuppressWarnings("deprecation")
	public List<Patient> readPatient() throws IOException, BiffException{
		
		//w = Workbook.getWorkbook(inputWorkbook);
	      // Get the first sheet
	      //Sheet sheet = w.getSheet(0);
	      for (int row = 1; row < sheet.getRows(); row++) {
	    	  
	        //new Patient
	        Patient newPatient = new Patient();

	        
	          for (int col = 0; col <= 2; col++) {
	        	 
	        		Cell cell = sheet.getCell(col, row);
                	
		            //Patient Name
		            if(col == 0){
		            	String[] nameParts = cell.getContents().split("\\s+");
		            	String firstname = "";
		            	String lastname = "";
		            	
		            	for (int k = 0; k < nameParts.length; k++) {
		            		//lastname ist letzer teil der nameParts
							if(k != nameParts.length-1){
								firstname += nameParts[k] + " ";
							}
							//andere teile sind firstnames
							else{
								lastname = nameParts[k];
							}
						}
		            	
		            	newPatient.setFirstname(firstname);
		            	newPatient.setLastname(lastname);

		            	
		            }
		            //Patient Geburtsdatum
		            else if(col == 1){
		            	DateCell dc = (DateCell) cell;
		            	
		            	Date oldBirthdate = dc.getDate();
		            	newPatient.setBirthdate(oldBirthdate.getYear());
		            }
		            //Geschlecht
		            else if(col == 2){
		            	String sex = cell.getContents();
		            	newPatient.setSex(sex.charAt(0));
		            }
		            
	        	}//for
	          
	          //set unique id
	          newPatient.setOldid((int) (System.currentTimeMillis() / 1000L + row));
	          
	          System.out.println("Firstname: " + newPatient.getFirstname());
	          System.out.println("Lastname: " + newPatient.getLastname());
	          System.out.println("Birthdate: " + newPatient.getBirthdate());
	          System.out.println("Sex: " + newPatient.getSex());
	          System.out.println("OldID: " + newPatient.getOldid());
	          System.out.println("----------------------");
	          
	          
	          //add patient to list
	          patientList.add(newPatient);
	           
	          }//for
		return patientList;
	}
	
	//###############################################################################################
	
	
	public List <Leistung> getLeistungen() throws IOException, BiffException{
		
		//w = Workbook.getWorkbook(inputWorkbook);
	      // Get the first sheet
	      //Sheet sheet = w.getSheet(0);
	      int row = 0;
	      for (int col = 0; col < sheet.getColumns(); col++) {
	    	  
	        //new Patient
	        Leistung newLeistung = new Leistung();

	        Cell cell = sheet.getCell(col, row);

	        switch (col) {
	        //erstuntersuchung
			case 3:
			//primärexzision
			case 4:
			//histologische untersuchung
			case 6:
			//...
			case 8:
			case 9:
			case 10:
			case 11:
			case 13:
			case 16:
			{
				newLeistung.setBezeichnung(cell.getContents());
				//set leistungscode
		        newLeistung.setLeistungscode(String.valueOf(new Date().getTime()));
		        leistungList.add(newLeistung);
				break;
			}
			default:
				break;
			}
	        
	        
	      }
	    
		return leistungList;
	}
	
	
	//###############################################################################################
	
	public List <Medication> getMedikation(){
		
		//19 therapie
		//20 sitzungen
		
		for (int row = 1; row < sheet.getRows(); row++) {
			
			//column 19: therapie bezeichnung
			//column 20: therapie sitzungen
			
			Cell cell = sheet.getCell(20, row);
			String[] sitzungen = cell.getContents().split(",\\s");
			
			//die Therapiesitzungen parsen
			if(sitzungen.length > 0 && !(sitzungen[0].equals(""))){
				for (int i = 0; i < sitzungen.length; i++) {
					Medication newMedication = new Medication();
					Date date = null;
					try {
						date = new SimpleDateFormat("dd.MM.yyyy").parse(sitzungen[i]);
						
						Timestamp ts = new Timestamp(date.getTime());				
						newMedication.setAusgabe(ts);
						
						newMedication.setBezeichnung(sheet.getCell(19,row).getContents());
						newMedication.setPatientId(patientList.get(row-1).getOldid());

						medikationList.add(newMedication);
						
					} catch (ParseException e) {
						e.printStackTrace();
					}
				}
			}//parsen
		}
		
		return medikationList;
	}

}
















